package com.sczmgk.syevaluation.utils;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;

import com.sczmgk.syevaluation.activity.LoginActivity;

import java.io.File;

public class FileUtil {


    private static final String TAG = FileUtil.class.getSimpleName();
    /**
     *
     */
    public static String ROOT_PATH = null;


    /**
     * 初始化应用存储路径
     *
     * @param context
     */
    public static void initAppStoragePath(Context context) {

        FileUtil.ROOT_PATH = getAppStorageDir(context);
    }



    public static String getAPKPath() {
        return ROOT_PATH + File.separator+"评价器.apk";

    }


    /**
     * 获取APP 存储的路径
     *
     * @param context
     * @return
     */
    public static String getAppStorageDir(Context context) {
        // 获取Android程序在Sd上的保存目录约定 当程序卸载时，系统会自动删除。
        File f = context.getExternalFilesDir(null);
        // 如果约定目录不存在
        if (f == null) {
            // 获取外部存储目录即 SDCard
            return getStorageDir(context);
        } else {
            String storageDirectory = f.getAbsolutePath();
            return storageDirectory;
        }

    }


    /**
     * 获取可用的sdcard路径
     *
     * @param context
     * @return
     */
    public static String getStorageDir(Context context) {
        return getStorageDir(context, true);
    }

    /**
     * 获取可用的sdcard路径
     *
     * @param context
     * @param isAllowUseCache 是否允许缓存
     * @return
     */
    public static String getStorageDir(Context context, boolean isAllowUseCache) {
        // 获取外部存储目录即 SDCard
        String storageDirectory = Environment.getExternalStorageDirectory()
                .toString();
        File fDir = new File(storageDirectory);
        // 如果sdcard目录不可用
        if (!fDir.canWrite()) {
            // 获取可用
            storageDirectory = getSDCardDir();
            if (storageDirectory != null) {
                storageDirectory = storageDirectory + File.separator
                        + "lezheng" + File.separator
                        + "lezhengchat";
                MyLog.d(TAG, "项目存储路径采用自动找寻可用存储空间的方式   storageDirectory:"
                        + storageDirectory);
                return storageDirectory;

            } else {
                if (isAllowUseCache) {
                    MyLog.e(TAG, "没有找到可用的存储路径  采用cachedir");
                    return context.getCacheDir().toString();
                } else {
                    return null;
                }
            }
        } else {
            storageDirectory = storageDirectory + File.separator + "pingan"
                    + File.separator
                    + "pachat";
            MyLog.d(TAG, "项目存储路径采用sdcard的地址   storageDirectory:"
                    + storageDirectory);
            return storageDirectory;
        }
    }

    /**
     * 获取一个可用的存储路径（可能是内置的存储路径）
     *
     * @return 可用的存储路径
     */
    private static String getSDCardDir() {
        String pathDir = null;
        // 先获取内置sdcard路径
        File sdfile = Environment.getExternalStorageDirectory();
        MyLog.e(TAG, "sdfile  =  " + sdfile.toString());
        // 获取内置sdcard的父路径
        File parentFile = sdfile.getParentFile();
        MyLog.e(TAG, "parentFile  =  " + parentFile.toString());
        // 列出该父目录下的所有路径
        File[] listFiles = parentFile.listFiles();
        // 如果子路径可以写 就是拓展卡（包含内置的和外置的）
        if (listFiles == null) {
            MyLog.e(TAG, "listFile  =  " + listFiles);
        }
        long freeSizeMax = 0L;
        if (listFiles != null) {
            for (int i = 0; i < listFiles.length; i++) {
                if (listFiles[i].canWrite()) {
                    // listFiles[i]就是SD卡路径
                    String tempPathDir = listFiles[i].getAbsolutePath();
                    long tempSize = getSDFreeSize(tempPathDir);
                    if (tempSize > freeSizeMax) {
                        freeSizeMax = tempSize;
                        pathDir = tempPathDir;
                    }
                }
            }
        }

        return pathDir;
    }

    /**
     * 获取可用的sdcard路径
     *
     * @param filePath
     * @return
     */
    public static long getSDFreeSize(String filePath) {

        try {
            File file = new File(filePath);
            if (!file.exists()) {
                file.mkdirs();
            }

            android.os.StatFs statfs = new android.os.StatFs(filePath);

            long nBlocSize = statfs.getBlockSize(); // 获取SDCard上每个block的SIZE

            long nAvailaBlock = statfs.getAvailableBlocks(); // 获取可供程序使用的Block的数量

            long nSDFreeSize = nAvailaBlock * nBlocSize; // 计算 SDCard
            // 剩余大小B
            return nSDFreeSize;
        } catch (Exception ex) {
            ex.printStackTrace();

        }

        return -1;
    }
}
